#ifndef KCENTERGREEDYCV_H
#define KCENTERGREEDYCV_H


#include <QObject>
#include <QVector>
#include <QDebug>
#include <random>
#include <limits>
#include <vector>
#include <cstdint>

// OpenCV 相关头文件
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/mat.hpp>

class KCenterGreedyCV : public QObject {
    Q_OBJECT

public:
    static KCenterGreedyCV& instance();

    // 使用OpenCV k-means方法提炼知识库
    void buildKnowledgeBase();
    // 增加新的数据到知识库
    void addToKnowledgeBase(const QVector<int8_t>& newData);

private:
    explicit KCenterGreedyCV(QObject* parent = nullptr);
    ~KCenterGreedyCV() = default;

    // 无需updateDistances、getNewIdx之类的函数，因为不用手写K-Center Greedy了
    // 无需computeDistanceSquared

    size_t totalPoints;
    QVector<int8_t> knowledgeBase_; // 最终的知识库 (N_*D_)
    QVector<int8_t> embedding;
    static constexpr size_t N_ = 2000; // 知识库大小(kmeans中的K)
    static constexpr size_t D_ = 1536; // 每个向量的维度
    int onceN_ = 784;
};



#endif // KCENTERGREEDYCV_H
